package com.application.model.ubicacion.database;

import java.sql.SQLException;

import com.application.model.database.ManagerDataBase;
import com.application.model.ubicacion.RetrievePaisArgenProp;
import com.application.model.ubicacion.entity.UbicacionGenericaConHijo;

public class UbicacionDB extends ManagerDataBase {

//	private RetrievePaisArgenProp retrieve;
	public UbicacionDB(RetrievePaisArgenProp retrieve) {
		super();
//		this.retrieve = retrieve;
	}

	public void save(UbicacionGenericaConHijo item) {		
		String pais = "";
		String provincia = "";
		String partido = "";
		String localidad = "";
		String barrio = "";

		String paisId = "";
		String provinciaId = "";
		String partidoId = "";
		String localidadId = "";
		String barrioId = "";

		
		try {
			pais = item.getNombre();
			paisId = item.getId();
			addPais(pais,paisId);
			for (UbicacionGenericaConHijo provinciaItem : item.getMapa().values()) {
				provincia = provinciaItem.getNombre();
				provinciaId = provinciaItem.getId();
				addProvincia(pais,provincia,provinciaId);
				for (UbicacionGenericaConHijo partidoItem : provinciaItem.getMapa().values()) {
					partido = partidoItem.getNombre();
					partidoId = partidoItem.getId();
					addPartido(pais, provincia, partido,partidoId);
					for (UbicacionGenericaConHijo localidadItem : partidoItem.getMapa().values()) {
						localidad = localidadItem.getNombre();
						localidadId = localidadItem.getId();
						addLocalidad(pais, provincia, partido, localidad,localidadId);
						for (UbicacionGenericaConHijo barriotem : localidadItem.getMapa().values()) {
							barrio = barriotem.getNombre();
							barrioId = barriotem.getId();
							addBarrio(pais, provincia, partido, localidad, barrio,barrioId);
						}
					}
				}
			}
		} catch (Exception e) {
			//retrieve.saveFile();
			logger.error(e);
		}
		
	}

	

	private void addPais(String pais, String paisId) throws SQLException {
		String query = "";
		try{
			query = "INSERT INTO ubicacion_pais (id,nombre) " +
					" VALUES ("+paisId+",'"+escapeValue(pais)+"')";
//			logger.info(query);
			executeQuery(query);
		}catch (Exception e) {
			logger.error(query);
			throw new SQLException(e);
		}		
	}
	private void addProvincia(String pais,String provincia, String provinciaId) throws SQLException {
		String query = "";
		try{
			query = "INSERT INTO ubicacion_provincia(id,nombre,fk_pais_id) " +
					" VALUES ("+provinciaId+",'"+escapeValue(provincia)+"'," +
							" " +getSQLPaisId(pais)+
					")";
//			logger.info(query);
			executeQuery(query);
		}catch (Exception e) {
			logger.error(query);
			throw new SQLException(e);
		}		
	}
	private void addPartido(String pais,String provincia,String partido, String partidoId) throws SQLException {
		String query = "";
		try{
//			if(partidoId.isEmpty()){
				query = "INSERT INTO ubicacion_partido(nombre,fk_provincia_id) "+
						" VALUES ('"+escapeValue(partido)+"'," +
								" " +getSQLProvinciaId(pais, provincia)+
						")";
				
//			}else{
//			query = "INSERT INTO partido(id,name,provincia_id) "+
//					" VALUES ("+partidoId+",'"+escapeValue(partido)+"'," +
//							" " +getSQLProvinciaId(pais, provincia)+
//					")";
//			}
//			logger.info(query);
			executeQuery(query);
		}catch (Exception e) {
			logger.error(query);
			throw new SQLException(e);
		}		
	}
	private void addLocalidad(String pais,String provincia,String partido,String localidad, String localidadId) throws SQLException {
		String query = "";
		try{
			query = "INSERT INTO ubicacion_localidad(nombre,fk_partido_id) " +
					" VALUES ('"+escapeValue(localidad)+"'," +
							" " +getSQLPartidoId(pais, provincia, partido)+
					")";
//			logger.info(query);
			executeQuery(query);
		}catch (Exception e) {
			logger.error(query);
			throw new SQLException(e);
		}		
	}
	private void addBarrio(String pais,String provincia,String partido,String localidad,String barrio, String barrioId) throws SQLException {
		String query = "";
		try{
			query = "INSERT INTO ubicacion_barrio(nombre,fk_localidad_id) " +
					" VALUES ('"+escapeValue(barrio)+"'," +
							" " +getSQLLocalidadId(pais, provincia, partido, localidad)+
					")";
//			logger.info(query);
			executeQuery(query);
		}catch (Exception e) {
			logger.error(query);
			throw new SQLException(e);
		}		
	}
	
}
